 
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Para acessar as fatias, usa-se a propriedade Slice, herdada *
 * por herança da classe Unit (Connector => Activate => Unit). *
 * Suponha que um componente tenha componentes aninhados "in1",*
 * "in2" e "in3" e que a unidade cujo protocolo será executado *
 * tenha fatias de "in1" e "in2". Para acessar o objeto que    *
 * representa "in1" e "in2", usa-se:                           *
 * 		- Slice["in1"];                                        *
 * 		- Slice["in2"].                                        *
 * Vão retornar os objetos que representam as unidades dos     *
 * componentes aninhados que são fatias da unidade. Usando     *
 * "cast" para a classe própria da unidade, você pode          *
 * acessar as ações e condições da unidade.                    *
 *                                                             *  
 * LIMITAÇÃO:                                                  *
 * O problema dessa abordagem é que os componentes aninhados   *
 * não podem ser conectores. Mas isso poderia ser resolvido    *
 * gerando a classe dinamicamente, usando reflection, a qual   * 
 * faria chamadas ao componente Connector, tornando uniforme   *
 * o uso dos componentes conectores e não-conectores.          *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 

using HPE.Port;
using System;
using br.ufc.pargo.hpe.kinds;

namespace HPE.Connector {
	
	public interface IConnector : IActivateKind {		

      IConfigurationPort ConfigurationPort {get;}
      
      //Acho que é desnecessário uma nova porta. A ConfigurationPort pode tratar das reconfigurações.
      //IReconfigurationPort ReconfigurationPort {get;}
      
      IMonitorPort MonitorPort {get;}

      int perform_action(string action);
      int perform_protocol();
      bool get_condition(string condition);
	}
}

